package hamaster.jpbc.crypt;

import hamaster.jpbc.exception.CryptException;
import hamaster.jpbc.gui.ProgressListener;

import java.io.File;
import java.io.IOException;
import java.io.OutputStream;

/**
 * 对文件进行对称加密操作的接口
 * @author <a href="mailto:wangyeee@gmail.com">Wang Ye</a>
 */
public interface CryptIO {

	/**
	 * 加密文件
	 * @param source 源文件
	 * @param destination 目标输出流
	 * @throws IOException 发生文件读写异常 如源文件不存在
	 * @throws CryptException 对加密算法抛出异常的封装
	 */
	void encrypt(File source, OutputStream destination) throws IOException, CryptException;

	/**
	 * 解密文件
	 * @param source 加密的文件
	 * @param destination 目标输出流
	 * @throws IOException 发生文件读写异常 如加密的文件不存在
	 * @throws CryptException 对解密算法抛出异常的封装
	 */
	void decrypt(File source, OutputStream destination) throws IOException, CryptException;

	/**
	 * 设置进度监听器 供显示操作进度
	 * @param progressListener 用来监视进度的监听器
	 */
	void setProgressListener(ProgressListener progressListener);

	/**
	 * 设置加密器
	 * @param crypt 要设置的加密器
	 */
	void setCrypt(Crypt crypt);

	/**
	 * 设置块大小
	 * @param blockSize 块大小 单位字节
	 */
	void setBlockSize(int blockSize);
}
